package org.ekingstar.qd.service.impl;

import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.ekingstar.qd.domain.QdFunction;
import org.ekingstar.qd.domain.QdFunctionRole;
import org.ekingstar.qd.service.CFunctionService;
import com.ekingstar.framework.service.IRoleService;

/**
 * 功能权限控制业务处理
 * @author 
 */
public class CFunctionServiceImpl implements CFunctionService {
	@SuppressWarnings("unused")
	private HibernateTemplate hibernateTemplate;
	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
	}
	
	@SuppressWarnings("unused")
	private JdbcTemplate jdbcTemplate;
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}
		
	@SuppressWarnings("unused")
	private IRoleService roleService;
	public void setRoleService(IRoleService roleService) {
		this.roleService = roleService;
	}
	
	/**
	 * @descripte 获取所有功能点信息	 
	 * @return List
	 */
	@SuppressWarnings("unchecked")
	public List<QdFunction> getFunctionList(){
		List<QdFunction> retList = null;
		try{
			String hql = " from QdFunction ";
			retList = hibernateTemplate.find(hql);
		}catch(Exception e){
			e.printStackTrace();
			retList = null;
		}
		return retList;
	}
	
	
	/**
	 * @descripte 根据父功能点ID号获取功能点信息
	 * @param strParentId 功能点父ID号
	 * @return List
	 */
	@SuppressWarnings({ "unchecked", "unchecked" })
	public List<QdFunction> getFunctionList(String strParentId){
		List<QdFunction> retList = null;
		try{
			if(strParentId!=null && !"".equals(strParentId.toString().trim())){
				String hql = " from QdFunction qdFunction where qdFunction.TQdFunction.id='"+strParentId+"'";
				retList = hibernateTemplate.find(hql);
			}
		}catch(Exception e){
			e.printStackTrace();
			retList = null;
		}
		return retList;
	}
	
	
	/**
	 * @descripte 根据功能点ID号获取功能点信息
	 * @param strFunctionId 功能点ID号
	 * @return QdFunction
	 */
	@SuppressWarnings("unchecked")
	public QdFunction getFunction(String strFunctionId){
		QdFunction qdFunction = null;
		try{
			if(strFunctionId!=null && !"".equals(strFunctionId.toString().trim())){
				qdFunction = (QdFunction)hibernateTemplate.get(QdFunction.class, strFunctionId.toString().trim());
			}
		}catch(Exception e){
			e.printStackTrace();
			qdFunction = null;
		}
		return qdFunction;
	}
		

	/**
	 * @descripte 根据功能点ID号和用户信息，判断该用户是否具有访问该功能点的权限，有为1，否则为-1
	 * @param strFunctionId 功能点ID号
	 * @param userId        用户ID号
	 * @return int
	 */
	@SuppressWarnings("unchecked")
	public int VerifyPermission(String strFunctionId,String userId){
		int retInt = -1;
		try{
			if(strFunctionId!=null && !"".equals(strFunctionId.toString().trim())&& userId!=null && !"".equals(userId.toString().trim())){
				List roleList = roleService.getRoleByUserId(userId);
				if(roleList!=null && roleList.size()>0){
					StringBuffer roleStr = new StringBuffer("");
					for(int i =0;i<roleList.size();i++){
						Map m = (Map)roleList.get(i);
						if(m!=null && !m.isEmpty() && m.get("id")!=null && !"".equals(m.get("id").toString().trim())){
							roleStr.append("'").append(m.get("id").toString().trim()).append("',");
						}
					}
					if(roleStr!=null && !"".equals(roleStr.toString().trim())){
						roleStr.append("''");
						String hql = " from QdFunctionRole qdFunctionRole where qdFunctionRole.id.roleId.id in ("+roleStr.toString()+") and qdFunctionRole.functionId.id='"+strFunctionId.toString().trim()+"' ";
						List l = hibernateTemplate.find(hql);
						if(l!=null && l.size()>0){
							retInt = 1;
						}						
					}		
				}				
			}			
		}catch(Exception e){
			e.printStackTrace();
			retInt = -1;
		}
		
		return retInt;
	}
	
	
	/**
	 * @descripte 增加功能点，成功返回1，否则返回-1
	 * @param strNo       功能号
	 * @param strParentId 父功能点ID号
	 * @param strName     功能点名称
	 * @param strDescript 功能点描述
	 * @return int
	 */
	public int addFunction(String strParentId,String strNo,String strName,String strDescript){
		int retInt = -1;
		try{
			if(strNo!=null && !"".equals(strNo.toString().trim()) && strName!=null && !"".equals(strName.toString().trim())){
				QdFunction qdFunction = new QdFunction();
				if(strParentId!=null && !"".equals(strParentId.toString().trim())){
					QdFunction pQdFunction = (QdFunction)this.hibernateTemplate.get(QdFunction.class, strParentId.toString().trim());					
					qdFunction.setTQdFunction(pQdFunction);
				}else{
					qdFunction.setTQdFunction(null);
				}
				
				qdFunction.setNo(strNo);
				qdFunction.setName(strName);
				qdFunction.setDescript(strDescript);
				
				hibernateTemplate.save(qdFunction);
				
				retInt = 1;				
			}
		}catch(Exception e){
			e.printStackTrace();
			retInt = -1;
		}
		
		return retInt;
	}
	
	
	/**
	 * @descripte 根据功能点ID号，修改功能点信息，成功返回1，否则返回-1
	 * @param strNo               功能号
	 * @param strFunctionId       功能点ID号
	 * @param strName             功能点名称
	 * @param strDescript         功能点描述
	 * @return int
	 */
	public int updateFunction(String strFunctionId,String strNo,String strName,String strDescript){
		int retInt = -1;
		try{
			if(strNo!=null && !"".equals(strNo.toString().trim()) && strName!=null && !"".equals(strName.toString().trim()) && strFunctionId!=null && !"".equals(strFunctionId.toString().trim())){
				QdFunction qdFunction =(QdFunction)hibernateTemplate.get(QdFunction.class, strFunctionId.toString().trim());
				if(qdFunction!=null && qdFunction.getId()!=null && !"".equals(qdFunction.getId().toString().trim())){
					qdFunction.setNo(strNo);
					qdFunction.setName(strName);
					qdFunction.setDescript(strDescript);
					
					hibernateTemplate.update(qdFunction);
					
					retInt = 1;				
				}
			}
		}catch(Exception e){
			e.printStackTrace();
			retInt = -1;
		}
		
		return retInt;
	}
	
	
	/**
	 * @descripte 根据功能点ID号，删除功能点，成功返回1，否则返回-1
	 * @param strFunctionId       功能点ID号集
	 * @return int
	 */
	@SuppressWarnings("unchecked")
	public int deleteFunction(String[] strFunctionId){
		int retInt = -1;
		try{
			if(strFunctionId!=null && strFunctionId.length>0){
				for(int i=0;i<strFunctionId.length;i++){
					if(strFunctionId[i]!=null && !"".equals(strFunctionId[i].toString().trim())){
						QdFunction qdFunction =(QdFunction)hibernateTemplate.get(QdFunction.class, strFunctionId[i].toString().trim());
						
						if(qdFunction!=null && qdFunction.getId()!=null && !"".equals(qdFunction.getId().toString().trim())){
							String hql = " from QdFunctionRole qdFunctionRole where qdFunctionRole.id.functionId.id='"+qdFunction.getId().toString().trim()+"'";
							List l = hibernateTemplate.find(hql);
							if(l!=null && l.size()>0){
								for(int j=0;j<l.size();j++){
									QdFunctionRole qdFunctionRole = (QdFunctionRole)l.get(j);
									hibernateTemplate.delete(qdFunctionRole);
								}
								
							}
							
							hibernateTemplate.delete(qdFunction);
						}
						
					}
				}
				
				retInt = 1;
			}
		}catch(Exception e){
			e.printStackTrace();
			retInt = -1;
		}
		return retInt;
	}

}
